package scau.edu.cn.entity.base;

import org.hibernate.annotations.GenericGenerator;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import javax.persistence.EntityListeners;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import java.util.Date;

/**
 * @description: 基本实体类
 * @author: yuxiang
 * @create: 2019-11-29 20:31
 **/
@MappedSuperclass
@EntityListeners({AuditingEntityListener.class})//用于监听实体类添加或者删除操作
public class BaseEntity {

//    @Id
//    //使用数据库的自增长字段为新增加的实体对象赋唯一值，作为实体的标识
//    @GeneratedValue(strategy = GenerationType.IDENTITY)
//    protected Long id;
    @Id
    //自定义生成策略注解 用jpa-uuid作为唯一标识 uuid作为生成策略
    @GenericGenerator(name = "jpa-uuid", strategy = "uuid") // id生成策略使用uuid生成策略
    //主键生成策略 这里对id主键使用之前定义好的jap-uuid生成策略 自行查阅生成策略
    @GeneratedValue(generator = "jpa-uuid") // 生成器使用上面的生成器（name = "jpa-uuid"）
    protected String id;
    //该实体生成的时间 在数据库生成表的时候会自动生成
    //在mysql可以看到类型是biging 表示19位超大整数
    @CreatedDate
    protected Date createTime;//创建时间字段，创建实体并持久化时数据库自动生成
    @LastModifiedDate
    protected Date updateTime;//更新时间字段，更新实体数据并持久化时数据库自动更新


    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public Date getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }

}
